package com.cloud.bssp.java8.Optional;

import lombok.Data;

import java.util.Optional;

/**
 * @description： TestOptional
 * @author：weirx
 * @date：2021/10/26 14:26
 * @version：3.0
 */
public class TestOptional {

    @Data
    static class Car {

        private Optional<Insurance> insuranceOptional;

        private String name;
    }

    @Data
    static class Insurance {

        private String name;
    }

    public static String test() {
        System.out.println("this car has no insurance");
        return "unknown";
    }

    static void addName(String name){
        System.out.println("the insurance is : " + name);
    }

    public static void main(String[] args) {

        System.out.println(35/10);
        System.out.println(40%10);
        Car car = new Car();
        Insurance insurance = new Insurance();
        insurance.setName("车险");
        car.setInsuranceOptional(Optional.of(insurance));
        Optional<Car> optionalCar = Optional.ofNullable(car);
        Optional<String> s = optionalCar.flatMap(Car::getInsuranceOptional).map(Insurance::getName).filter("车险"::equals);
        System.out.println(s.get());


        // 1、声明一个空Optional
        Optional<Car> optional1 = Optional.empty();

        // 2、依据一个非空值创建Optional，如果传入一个null，则会抛出空指针异常
        Optional<Car> optional2 = Optional.of(new Car());

        // 3、可接受null的Optional：使用静态工厂方法 Optional.ofNullable ，你可以创建一个允许 null 值的 Optional
        // 如果 car 是 null ，那么得到的 Optional 对象就是个空对象。
        Optional<Car> optional3 = Optional.ofNullable(null);
    }
}
